Completed
Push — master ( aa59a9...9ba8bc )
by Alejandro
27s queued 10s
created

.handleToggle   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 3
ccs 0
cts 2
cp 0
rs 10
c 0
b 0
f 0
cc 1
crap 2
1
import { faPlus as plusIcon, faChevronDown as arrowIcon, faCogs as cogsIcon } from '@fortawesome/free-solid-svg-icons';
2
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
import React, { useEffect } from 'react';
4
import { Link } from 'react-router-dom';
5
import { Collapse, Nav, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink } from 'reactstrap';
6
import classNames from 'classnames';
7
import PropTypes from 'prop-types';
8
import { useToggle } from '../utils/helpers/hooks';
9
import shlinkLogo from './shlink-logo-white.png';
10
import './MainHeader.scss';
11
12
const propTypes = {
13
  location: PropTypes.object,
14
};
15
16
const MainHeader = (ServersDropdown) => {
17
  const MainHeaderComp = ({ location }) => {
18
    const [ isOpen, toggleOpen, , close ] = useToggle();
19
    const { pathname } = location;
20
21
    useEffect(close, [ location ]);
22
23
    const createServerPath = '/server/create';
24
    const settingsPath = '/settings';
25
    const toggleClass = classNames('main-header__toggle-icon', { 'main-header__toggle-icon--opened': isOpen });
26
27
    return (
28
      <Navbar color="primary" dark fixed="top" className="main-header" expand="md">
29
        <NavbarBrand tag={Link} to="/">
30
          <img src={shlinkLogo} alt="Shlink" className="main-header__brand-logo" /> Shlink
31
        </NavbarBrand>
32
33
        <NavbarToggler onClick={toggleOpen}>
34
          <FontAwesomeIcon icon={arrowIcon} className={toggleClass} />
35
        </NavbarToggler>
36
37
        <Collapse navbar isOpen={isOpen}>
38
          <Nav navbar className="ml-auto">
39
            <NavItem>
40
              <NavLink tag={Link} to={settingsPath} active={pathname === settingsPath}>
41
                <FontAwesomeIcon icon={cogsIcon} />&nbsp; Settings
42
              </NavLink>
43
            </NavItem>
44
            <NavItem>
45
              <NavLink tag={Link} to={createServerPath} active={pathname === createServerPath}>
46
                <FontAwesomeIcon icon={plusIcon} />&nbsp; Add server
47
              </NavLink>
48
            </NavItem>
49
            <ServersDropdown />
50
          </Nav>
51
        </Collapse>
52
      </Navbar>
53
    );
54
  };
55
56
  MainHeaderComp.propTypes = propTypes;
57
58
  return MainHeaderComp;
59
};
60
61
export default MainHeader;
62